package linyunshi.rbac.view;

import linyunshi.rbac.domain.vo.BaseVo;
import linyunshi.rbac.domain.vo.Result;
import linyunshi.rbac.service.IBaseService;

/**
 * 视图层-基类
 *
 * @author linyunshi
 * @since 2025/6/8 22:28
 */
public abstract class BaseView<Vo extends BaseVo,IService extends IBaseService> {

    IService service;

    Vo[] cache;

    /**
     * 输出错误信息
     */
    void printError(String message) {
        System.out.println("\033[31m" + message + "\033[0m");//改变message的颜色。
    }

    Vo getCacheById() {
        System.out.print("请输入部门ID,ID必须是大于0的整数：");

        //判断输入是否合法(用户输入的id是否是整数，且大于0)
        if (!MainView.input.hasNextInt()) {
            MainView.input.nextLine();// 读取换行符
            printError("ID必须是整数，请输入整数值");
            return null;
        }

        int id = MainView.input.nextInt();
        MainView.input.nextLine();// 读取换行符

        //判断id是否合法
        if (id < 1) {
            printError("ID必须大于0，请重新输入");
            return null;
        }

        //判断缓存数组是否为空
        if (cache == null || cache.length == 0) {
            Result result = service.list();
            cache = (Vo[]) result.data;
        }

        Vo vo = null;

        for (Vo item : cache) {
            if (item.id == id) {
                System.out.println("该ID对应的数据：");
                System.out.println(item);
                vo = item;
                break;
            }
        }

        if (vo == null) {
            printError("当前没有该ID对应的数据");
            return null;
        }

        return vo;//没有问题时
    }

}
